package freemarker.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class FreeMarkerUtil {

	/**
	 * 
	 *  生成模板
	 *
	 *	@param templatePath  模板所在目录
	 *	@param templateName  模板文件名称
	 *	@param fileName      生成的文件名称
	 *	@param root          數據模型
	 *	void
	 *	@see
	 * 	@throws
	 */
	public static void analysisTemplate(String templatePath, String templateName, String fileName, Map<?, ?> root) {

		Configuration config = new Configuration();

		Writer out = null;
		try {
			//设置模板所在目录
			config.setDirectoryForTemplateLoading(new File(templatePath));

			//设置包装器，并将对象包装为数据模型
			config.setObjectWrapper(new DefaultObjectWrapper());

			//获取模板,并设置编码方式，这个编码必须要与页面中的编码格式一致，否则会出现乱码
			Template template = config.getTemplate(templateName, "UTF-8");

			//合并数据模型与模板,生成fileName
			FileOutputStream fos = new FileOutputStream(fileName);

			out = new OutputStreamWriter(fos, "UTF-8");

			template.process(root, out);

			out.flush();

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (TemplateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				if (out != null) {
					out.close();
				}
			} catch (Exception e) {
				//logger.error("Writer out close erorr", e);
			}
		}
	}
}
